package javaer.starter.base.domain.dto;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

import java.io.Serializable;
import java.util.Objects;
import java.util.Set;

/**
 * @author yangzhen
 * @date 2023/6/5 14:30
 * @since 1.0.0
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DependencyDTO implements Serializable {

    /**
     * 脚手架类型唯一标识
     */
    String typeId;
    /**
     * 依赖唯一标识
     */
    String depId;
    /**
     * 依赖坐标组
     */
    String groupId;
    /**
     * 依赖坐标
     */
    String artifactId;
    /**
     * 依赖版本
     */
    String version;
    /**
     * 指定所依赖的项目的作用域，它有多种类型，表示依赖的限制范围，包括 compile, runtime, provided, test, system 和 import。
     */
    String scope;
    /**
     * 标记该依赖是否是可选的，如果标记为 "true"，则不会强制使用该依赖项。
     */
    String optional;
    /**
     * classifier是指为了在同一个版本下为了区分不同的构建输出而存在的一种方式
     */
    String classifier;
    /**
     * 表示依赖的文件类型，默认为 jar。
     */
    String depType;
    /**
     * 排除的依赖
     */
    Set<DependencyExcludedDTO> exclusions;
    /**
     * 关联的依赖
     */
    Set<DependencyRelatedDTO> inclusions;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        DependencyDTO that = (DependencyDTO) o;
        return Objects.equals(groupId, that.groupId) && Objects.equals(artifactId, that.artifactId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(groupId, artifactId);
    }
}
